//package exsun.jt808.data.media.operate.encode;
//
//import exsun.jt808.data.config.MediaEncoding;
//import exsun.jt808.data.media.data.MediaConfig;
//import exsun.jt808.data.media.operate.encode.codec.*;
//
//import java.util.concurrent.ConcurrentHashMap;
//
//public class MediaCodecManager {
//
//    public MediaCodecManager(){
//        initCodeMap();
//    }
//    /**
//     * 音视频类型对应的转码器
//     */
//    public ConcurrentHashMap<String, CodecBase> codecMap = new ConcurrentHashMap<>();
//
//    public String getCodecKey(MediaEncoding.Encoding fromMediaType, MediaEncoding.Encoding ToMediaType){
//        return fromMediaType + "-" + ToMediaType;
//    }
//
//    public void initCodeMap() {
//        codecMap.put(getCodecKey(MediaEncoding.Encoding.G711A, MediaEncoding.Encoding.AAC), new EasyAacCodec(MediaEncoding.Encoding.G711A));
//        codecMap.put(getCodecKey(MediaEncoding.Encoding.G711U, MediaEncoding.Encoding.AAC), new EasyAacCodec(MediaEncoding.Encoding.G711U));
//        codecMap.put(getCodecKey(MediaEncoding.Encoding.LPCM, MediaEncoding.Encoding.G711A), new PcmToG711aCodec());
//        codecMap.put(getCodecKey(MediaEncoding.Encoding.LPCM, MediaEncoding.Encoding.G711U), new PcmToG711uCodec());
//        codecMap.put(getCodecKey(MediaEncoding.Encoding.LPCM, MediaEncoding.Encoding.AAC), new PcmToAacCodec());
//    }
//
//    public void init(MediaConfig config, String clientChannelId, MediaEncoding.Encoding fromMediaType, MediaEncoding.Encoding ToMediaType) {
//        CodecBase codecBase = GetCodec(fromMediaType, ToMediaType);
//        if(codecBase == null)return;
//        codecBase.init(config, clientChannelId);
//    }
//
//    public byte[] decode(String clientChannelId, byte[] data, MediaEncoding.Encoding fromMediaType, MediaEncoding.Encoding ToMediaType) {
//        CodecBase codecBase = GetCodec(fromMediaType, ToMediaType);
//        //若没有找到编码器，则返回原始数据
//        if(codecBase == null)return data;
//        return codecBase.decode(clientChannelId, data);
//    }
//
//    public void release(String clientChannelId) {
//        for (CodecBase codecBase: codecMap.values()) {
//            codecBase.release(clientChannelId);
//        }
//    }
//
//    public void release(String clientChannelId, MediaEncoding.Encoding fromMediaType, MediaEncoding.Encoding ToMediaType) {
//        CodecBase codecBase = GetCodec(fromMediaType, ToMediaType);
//        if(codecBase == null)return;
//        codecBase.release(clientChannelId);
//    }
//    /**
//     * 获取转码器
//     * @return
//     */
//    private CodecBase GetCodec(MediaEncoding.Encoding fromMediaType, MediaEncoding.Encoding ToMediaType){
//        String codecKey = getCodecKey(fromMediaType, ToMediaType);
//        if(!codecMap.containsKey(codecKey))return null;
//        return codecMap.get(codecKey);
//    }
//
//
//}
